/*********************************************************************

	SCUMiX(R) SWAT JavaScript Toolkit
	SxForm.js

	author: scumyang
	create: 2009-04-21
	desc. : SxForm 表单支持
	update: 2009-12-23
			2010-10-15, scumyang: 增加 asynUpdateList()
			2011-08-01, scumyang: 修改 asynUpdateList, 增加 defaultItem 参数, 可在获得数据后选中指定项.

*********************************************************************/

/*
SxForm 数据样本:

var __SxFormData =
{
	items:
	[
		{id:'QName', field:'FName', caption:'名称', mustFill:1, minLen:4, maxLen:20, validateExp:/\W+/},
		{id:'QLogonName', field:'FLogonName', caption:'登录名', mustFill:1, minLen:4, maxLen:20, validateExp:/\W+/},
		{id:'QKind', field:'FKind', caption:'类别', mustFill:1, minLen:0, maxLen:20},
		{id:'QPwd', field:'FLogonPwd', caption:'登录密码', mustFill:1, minLen:6, maxLen:20, validateExp:/\W+/}
	]
}
*/

/* Swat Ext: SxForm */	
if( swat && swat.version >= 3.0 )
{
	swat.ext.SxForm = {}
	swat.ext.SxForm.extend = swat.extend;

	swat.ext.SxForm.extend(
	{
		check: function( F, P )
		{
			P = P ? P : __SxFormData;
			if( !P ) return "";
			
			F = $E( F );
			if( !F ) return "";
			
			var i, el = F.elements, S = '', msg = '';

			for( i=0; i<el.length; i++ )
			{
				var o = el[i];

				// 是否为需提交参数
				var it = this.findItem( el[i].id, P );
				if( it )
				{
					// 是否必填
					if( o.value.length == 0 && it.mustFill )
					{
						msg = '“' + it.caption + '”不能为空';
						break;
					}
					
					// 数据长度
					if( it.minLen && o.value.length < it.minLen )
					{
						msg = '“' + it.caption + '” 最小长度为 ' + it.minLen + ', 请重新填写';
						break;
					}
					
					if( it.maxLen && o.value.length > it.maxLen )
					{
						msg = '“' + it.caption + '” 最大长度为 ' + it.maxLen + ', 请重新填写';
						break;
					}

					if( !it.keepBlank )
					{
						o.value = o.value.trim();
					}

					// 验证
					if( it.acceptExp )
					{
						var re = new RegExp( it.acceptExp, 'ig' );
						if( !re.test( o.value ))
						{
							msg = '“' + it.caption + '” 数据格式不正确, 请重新填写';
							break;
						}
					}

					if( it.denialExp )
					{
						var re = new RegExp( it.denialExp, 'ig' );
						if( re.test( o.value ))
						{
							msg = '“' + it.caption + '” 包含了不正确的数据格式, 请重新填写';
							break;
						}
					}

					S += it.field + '=' + encodeURIComponent( o.value ) + '&';
				}
			}

			if( i < el.length )
			{
				alert( msg );
				return '';
			}
			
			return S.substr( 0, S.length - 1 );
		},
		
		findItem: function( T, P )
		{
			for( var i=0; i<P.items.length; i++ )
			{
				if( P.items[i].id == T ) return P.items[i];
			}
			return null;
		},

		// 异步更新: select
		asynUpdateList: function( P )
		{
			if( !P || !P.url || !P.componentInst ) return false;

			if( P.tipElem ) $(P.tipElem).setText( '获取异步数据...' );

			$.ajax.load
			({
				url: P.url,
				onData: function( r )
				{
					if( !r ) return false;
					try
					{
						eval( "var json=" + r );
						if( !$.json.assert( json )) return false;
					
						for( var i=0; i<json.data.length; i++ )
						{
							P.componentInst.addItem( [json.data[i].text], [json.data[i].value] );
						}

						P.componentInst.selectById( P.defaultValue, false );
						
						//if( P.tipElem ) $(P.tipElem).setText( P.tipText ? P.tipText : '' );
						if( P.tipElem ) $E(P.tipElem).innerHTML = ( P.tipText ? P.tipText : '' );
						if( P.defaultValue ) P.componentInst.setValue( P.defaultValue );
						
						if( typeof P.defaultItem != 'undefined' )
						{
							if( !isNaN( parseInt( P.defaultItem )))
							{
								P.componentInst.selectById( parseInt( P.defaultItem ), false );
							}
						}
					}
					catch( E )
					{
						alert( 'asynUpdateList() failed: ' + E.message );
					}
				}
			});
		},

		// 异步更新: edit
		asynUpdateEdit: function( P )
		{
			if( !P || !P.url || !P.componentInst ) return false;

			if( P.tipElem ) $(P.tipElem).setText( '获取异步数据...' );

			$.ajax.load
			({
				url: P.url,
				onData: function( r )
				{
					if( !r ) return false;
					try
					{
						eval( "var json=" + r );
						if( !$.json.assert( json )) return false;
						
						P.componentInst.value = json.data;

						//if( P.tipElem ) $(P.tipElem).setText( P.tipText ? P.tipText : '' );
						if( P.tipElem ) $E(P.tipElem).innerHTML = ( P.tipText ? P.tipText : '' );
						if( P.defaultValue ) P.componentInst.setValue( P.defaultValue );
					}
					catch( E )
					{
						alert( 'asynUpdateEdit() failed: ' + E.message );
					}
				}
			});
		}
	})
}
